# -*- coding: utf-8 -*-
#魔方视觉模块
###################################
#导入图片预处理模块
import visual.pretreat as  pretreat
import cv2 as cv
import visual.cubeSplit as  cubeSplit
import visual.classifier as classifier

#类型检查
def typesCheck(types):
	all=[0,0,0,0,0,0];
	isError=False;
	for side in types:
		for type in side:
			all[type-1]+=1;
	for i in range(6):
		if all[i]!=9:
			print("num:",i+1,"error,size:",all[i]);
			isError=True;
	if isError:
		raise Exception("识别错误【类型检查异常】，请重新拍照识别")

#得到魔方的块类型
def getTypes():
	#抓取每个摄像头一帧图片
	top,bottom,left,right=getImages();
	# 图片预处理
	imgArray=pretreat.handle(top,bottom,left,right);
	#图片分割
	blocks=cubeSplit.split(imgArray);
	#图片相似度匹配分类
	types=classifier.classifie(blocks);
	return types;

#通过三张图片获取分类类型(单摄像头方案)
#此处的魔方为黑色背景魔方
def getTypesByOneCameraBlack(img1,img2,img3):
	#预处理图片获得所有块
	blocks=pretreat.handleWithOneCamera(img1,img2,img3);
	#图片相似度匹配分类
	types=classifier.classifie(blocks);
	typesCheck(types);
	return types;

#此处的魔方为黑色背景魔方
def getTypesByFourCameraBlack(top,bottom,left,right):
	#预处理图片获得所有块
	blocks=pretreat.handleFourCameraWithBlack(top,bottom,left,right);
	#图片相似度匹配分类
	types=classifier.classifie(blocks);
	#类型检查
	typesCheck(types);
	return types;


#通过三张图片获取分类类型(单摄像头方案)
#此处的魔方为白色背景魔方
def getTypesByOneCameraWhite(img1,img2,img3):
	#预处理所有图片
	imgArray=pretreat.handleWithOneCamera(img1,img2,img3,pretreat.CUBE_TYPE_WHITE);
	for i in range(6):
		cv.imwrite("C:/Users/ASUS/Desktop/test/big/"+str(i)+".jpg",imgArray[i]);
	#图片分割
	blocks=cubeSplit.split(imgArray);
	#分类
	types=classifier.classifie(blocks,classifier.HSV_COLOR_RANGE);
	#类型检查
	typesCheck(types);
	return types;


